home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / include / global.h < prev    next >
C/C++ Source or Header  |  1996-07-24  |  9KB  |  293 lines

  1. /*
  2.  * static char *rcsid_global_h =
  3.  *   "$Id: global.h,v 1.29 1996/03/04 09:58:32 master Exp $";
  4.  */
  5.  
  6. /*
  7.     CrossFire, A Multiplayer game for X-windows
  8.  
  9.     Copyright (C) 1992 Frank Tore Johansen
  10.  
  11.     This program is free software; you can redistribute it and/or modify
  12.     it under the terms of the GNU General Public License as published by
  13.     the Free Software Foundation; either version 2 of the License, or
  14.     (at your option) any later version.
  15.  
  16.     This program is distributed in the hope that it will be useful,
  17.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.     GNU General Public License for more details.
  20.  
  21.     You should have received a copy of the GNU General Public License
  22.     along with this program; if not, write to the Free Software
  23.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24.  
  25.     The author can be reached via e-mail to frankj@ifi.uio.no.
  26. */
  27.  
  28. #ifndef GLOBAL_H
  29. #define GLOBAL_H
  30.  
  31. #ifndef EXTERN
  32. #define EXTERN extern
  33. #endif
  34.  
  35. #include "includes.h"
  36.  
  37. #define NUM_COLORS    13
  38.  
  39. #define XDRAWIMAGESTRING(disp,win,gc,x,y,str,len) \
  40. XDrawImageString16(disp,win,gc,x,y,str,len)
  41. #define FontindexToXChar(s) fontindex_to_XChar2b(s)
  42. #define XCharToFontindex(s) ((Fontindex) ((s).byte1*256 +  (s).byte2))
  43. typedef unsigned short Fontindex;
  44. typedef XChar2b XChar; 
  45.  
  46.  
  47. #include "structs.h"
  48. #if defined(SOUND_EFFECTS) && !defined(__CEXTRACT__)
  49. #include <rplay.h> /* RPLAY structure */
  50. #endif
  51.  
  52. /*****************************************************************************
  53.  * GLOBAL VARIABLES:                                 *
  54.  *****************************************************************************/
  55.  
  56.  
  57. extern char *colorname[NUM_COLORS][2];
  58. extern New_Face *new_faces;
  59.  
  60. /*
  61.  * These are the beginnings of linked lists:
  62.  */
  63. EXTERN player *first_player;
  64. EXTERN mapstruct *first_map;
  65. EXTERN treasurelist *first_treasurelist;
  66. EXTERN artifactlist *first_artifactlist;
  67. EXTERN archetype *first_archetype;
  68. EXTERN objectlink *first_friendly_object;    /* Objects monsters will go after */
  69. EXTERN sockets *first_socket;            /* Start of linked list of sockets */
  70.  
  71. /*
  72.  * The editor uses these (will get them out of here later):
  73.  */
  74.  
  75. EXTERN long fix_fontpath;
  76. EXTERN int synchronize;
  77. EXTERN long no_color;
  78. EXTERN long editor;     /* if true, edit maps instead of playing (almost obsolete) */
  79. EXTERN int write_state; /* 1= write to level, 2=write to name */
  80. EXTERN int write_pos;   /* Position in write_buf */
  81. EXTERN int write_d;     /* Which position in the button we start writing from */
  82. EXTERN int button_flag;
  83. EXTERN int last_bard;
  84. EXTERN int fix_walls;
  85. EXTERN int monsters;
  86. EXTERN int generators;
  87. EXTERN int hidden;
  88. EXTERN int others;
  89.  
  90. /*
  91.  * Variables set by different flags (see init.c):
  92.  */
  93.  
  94. EXTERN int maplevel;
  95. EXTERN long delete_last_file;
  96. EXTERN long warn_archetypes;    /* If true, write warnings when failing */
  97.                 /* to find archetypes when loading from file */
  98. EXTERN long init_done;            /* Ignores signals until init_done is true */
  99. EXTERN long trying_emergency_save;    /* True when emergency_save() is reached */
  100. EXTERN LogLevel debug;            /* Set with -d flag */
  101. EXTERN long default_split_window;    /* Set with -w flag */
  102. EXTERN long dump_monsters;        /* Set with -m flag */
  103. EXTERN int use_pixmaps;        /* Set with -pix flag */
  104. EXTERN int color_pix;        /* Set with -xpm flag */
  105. EXTERN long nroferrors;        /* If it exceeds MAX_ERRORS, call fatal() */
  106.  
  107. EXTERN long pticks;        /* used by various function to determine */
  108.                 /* how often to save the character */
  109. /*
  110.  * Global pointers to the original argv, argc and genv given to main()
  111.  */
  112.  
  113. EXTERN int gargc;
  114. EXTERN char **gargv,**genv;
  115.  
  116. /*
  117.  * Misc global variables:
  118.  */
  119. EXTERN FILE *logfile;            /* Used by server/daemon.c */
  120. EXTERN int exiting;            /* True if the game is about to exit */
  121. EXTERN int server_mode;        /* True if the game is in server mode */
  122. EXTERN char *name;            /* The name of the game, usually "crossfire" */
  123. EXTERN long last_micro;        /* When process_active_maps() was last exec */
  124. EXTERN long nroftreasures;        /* Only used in malloc_info() */
  125. EXTERN long nrofartifacts;        /* Only used in malloc_info() */
  126. EXTERN long nrofallowedstr;        /* Only used in malloc_info() */
  127.  
  128. /* global stuff used by MULTI god hack -b.t. */
  129.  
  130. #define MAX_RACES 10
  131. #define MAX_RACE_MEMBERS 20
  132. EXTERN god Gods[NROFGODS];
  133. EXTERN char summoned_monsters[MAX_RACES][MAX_RACE_MEMBERS][MAX_BUF];
  134.  
  135. /* global stuff used by new skill/experience system -b.t. */ 
  136. #define MAX_EXP_CAT 7         /* This should be => # of exp obj in the game 
  137.                  * remember to include the "NULL" exp object  
  138.                      * EXP_NONE as part of the overall tally. 
  139.                  */
  140. #define EXP_NONE (MAX_EXP_CAT - 1)  /* "NULL" exp. object. This is the last 
  141.                      * experience obj always.*/ 
  142. EXTERN short nrofexpcat;    /* Current number of experience categories in the game */
  143. EXTERN object *exp_cat[MAX_EXP_CAT];    /* Array of experience objects in the game */ 
  144.  
  145. EXTERN archetype *empty_archetype;    /* Nice to have fast access to it */
  146. EXTERN archetype *map_archeytpe;
  147. EXTERN char *chrfont;
  148. EXTERN char first_map_path[MAX_BUF];    /* The start-level */
  149.  
  150. #ifdef LONGJUMP
  151. EXTERN jmp_buf jump_addr;
  152. #endif
  153. EXTERN Atom    Protocol_atom, Kill_atom;
  154. EXTERN XClientMessageEvent *cmev;
  155. EXTERN char errmsg[HUGE_BUF];
  156. EXTERN long ob_count;
  157. /*
  158.  * Used in treasure.c
  159.  */
  160. EXTERN archetype *ring_arch,*amulet_arch,*staff_arch,*crown_arch;
  161. EXTERN char *undead_name;    /* Used in hit_player() in main.c */
  162. EXTERN sockets *active_socket;
  163.  
  164. EXTERN int freearr_x[SIZEOFFREE], freearr_y[SIZEOFFREE];
  165. EXTERN int maxfree[SIZEOFFREE], freedir[SIZEOFFREE];
  166.  
  167. EXTERN New_Face *blank_face;
  168. EXTERN New_Face *blocked_face;
  169. EXTERN New_Face *stipple1_face;
  170. EXTERN New_Face *stipple2_face;
  171. EXTERN New_Face *potion_face;
  172. EXTERN MapLook blank_look;
  173. EXTERN New_Face *inv_curse_face, *inv_damn_face, *inv_equip_face, *inv_lock_face,
  174.          *inv_magic_face, *inv_unpaid_face;
  175.  
  176.  
  177. #ifdef SOUND_EFFECTS
  178. EXTERN RPLAY    *sound_table[NROF_SOUNDS];
  179. #endif
  180.  
  181. EXTERN char *LibDir;
  182. EXTERN char *FontDir;
  183. EXTERN char *PlayerDir;
  184. EXTERN char *MapDir;
  185. EXTERN char *ArcheTypes;
  186. EXTERN char *Treasures;
  187.  
  188. #ifdef UNIQUE_ITEMS
  189. EXTERN char *ItemsDir;
  190. #endif
  191.  
  192. extern long max_time;    /* loop time */
  193.  
  194. EXTERN char *font_graphic;
  195.  
  196. #ifndef __CEXTRACT__
  197. #include <xdir.h>
  198. #include "libproto.h"
  199. #endif
  200.  
  201. #ifdef __hpux__ /* Must do this after including proto.h */
  202. #define strdup_local(str) strdup(str);
  203. #endif
  204.  
  205. #define set_map(M,X,Y,C)    ((M)->map[(X)+((M)->mapx*(Y))]=*(C))
  206. #define get_map(M,X,Y)        (&(M)->map[(X)+((M)->mapx*(Y))])
  207. #define set_map_ob(M,X,Y,tmp)    ((M)->map_ob[(X)+((M)->mapx*(Y))]=(tmp))
  208. #define get_map_ob(M,X,Y)    ((M)->map_ob[(X)+((M)->mapx*(Y))])
  209. #define out_of_map(M,X,Y)    ((X)<0||(X)>=(M)->mapx||(Y)<0||(Y)>=(M)->mapy)
  210. #define get_map_floor(M,X,Y)    (&(M)->floor[(X)+((M)->mapx*(Y))])
  211.  
  212. #ifdef DOUBLE_FLOOR
  213. #define get_map_floor2(M,X,Y)    (&(M)->floor2[(X)+((M)->mapx*(Y))])
  214. #define set_map_floor2(M,X,Y,C)    ((M)->floor2[(X)+((M)->mapx*(Y))]=*(C))
  215. #endif
  216.  
  217. #define decrease_ob(xyz) decrease_ob_nr(xyz,1)
  218.  
  219. #ifdef CALLOC
  220. #undef CALLOC
  221. #endif
  222.  
  223. #ifdef USE_CALLOC
  224. # define CALLOC(x,y)    calloc(x,y)
  225. # define CFREE(x)    cfree(x)
  226. #else
  227. # define CALLOC(x,y)    malloc(x*y)
  228. # define CFREE(x)    free(x)
  229. #endif
  230.  
  231. /*
  232.  * Made this a macro since it's mostly used in time-critical areas:
  233.  * (Hopefully a good optimizer will be able to move the if() out of
  234.  * any loop where this macro is used.  That wouldn't have been possible
  235.  * if this was a function!)
  236.  */
  237.  
  238. /*
  239.  * Have two version of this macro.  One if Xpm_Pix is defined, another
  240.  * if Xpm_Pix is not defined.  IT would be better to actually have the
  241.  * #ifdef's inside the macro itself, instead of having two versions, but
  242.  * I was not able to get that to work.
  243.  * Mark Wedel (master@rahul.net)
  244.  */
  245.  
  246. #ifdef Xpm_Pix
  247. #define draw_face(pl,win,gc,x,y,face) \
  248. { \
  249.   if (pl->color_pixmaps) \
  250.   { \
  251.     XSetClipMask(pl->gdisp, gc, pl->masks[(face)]); \
  252.     XSetClipOrigin(pl->gdisp, gc, x, (y) - 24); \
  253.     XCopyArea(pl->gdisp, pl->pixmaps[(face)], win, gc, 0, 0, 24, 24, \
  254.     (unsigned int) (x), (unsigned int) ((y) - 24)); \
  255.   } \
  256.   else if(pl->use_pixmaps) \
  257.   { \
  258.     XCopyPlane(pl->gdisp,pl->pixmaps[(face)],win,gc,0,0,24,24, \
  259.                (unsigned int) (x),(unsigned int) ((y) - 24),1); \
  260.   } \
  261.   else \
  262.   { \
  263.     XChar buf; \
  264.     buf = FontindexToXChar((Fontindex) (face)); \
  265.     XDRAWIMAGESTRING(pl->gdisp,win,gc,x,y,&buf,1); \
  266.   } \
  267. }
  268. #else
  269. #define draw_face(pl,win,gc,x,y,face) \
  270. { \
  271.   if(pl->use_pixmaps) \
  272.   { \
  273.     XCopyPlane(pl->gdisp,pl->pixmaps[(face)],win,gc,0,0,24,24, \
  274.                (unsigned int) (x),(unsigned int) ((y) - 24),1); \
  275.   } \
  276.   else \
  277.   { \
  278.     XChar buf; \
  279.     buf = FontindexToXChar((Fontindex) (face)); \
  280.     XDRAWIMAGESTRING(pl->gdisp,win,gc,x,y,&buf,1); \
  281.   } \
  282. }
  283. #endif
  284.  
  285. /*
  286.  * Have to define LOG() to nothing if NO_LOG is defined.
  287.  */
  288. #ifdef NO_LOG
  289. #define LOG()
  290. #endif
  291.  
  292. #endif /* GLOBAL_H */
  293.